/*
实验11-1 集合相似度
分数 25
作者 陈越
单位 浙江大学

给定两个整数集合，它们的相似度定义为：Nc​/Nt​×100%。其中 Nc​ 是两个集合都有的不相等整数的个数，Nt​ 是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。
输入格式：

输入第一行给出一个正整数 n（≤50），是集合的个数。随后 n 行，每行对应一个集合。每个集合首先给出一个正整数 m（≤104），是集合中元素的个数；然后跟 m 个 [0,109] 区间内的整数。

之后一行给出一个正整数 k（≤2000），随后 k 行，每行对应一对需要计算相似度的集合的编号（集合从 1 到 n 编号）。数字间以空格分隔。
输出格式：

对每一对需要计算的集合，在一行中输出它们的相似度，为保留小数点后 2 位的百分比数字。
输入样例：

3
3 99 87 101
4 87 101 5 87
7 99 101 18 5 135 18 99
2
1 2
1 3

输出样例：

50.00%
33.33%
*/

#include <iostream>
#include <set>
#include <unordered_map>
#include <vector>

using namespace std;

int main() {
    int n;
    cin >> n;
    vector<set<int>> sets(n);
    for (int i = 0; i < n; i++) {
        int m;
        cin >> m;
        for (int j = 0; j < m; j++) {
            int x;
            cin >> x;
            sets[i].insert(x);
        }
    }
    int k;
    cin >> k;
    for (int i = 0; i < k; i++) {
        int a, b;
        cin >> a >> b;
        a--;
        b--;
        int Nc = 0;
        for (auto it = sets[a].begin(); it != sets[a].end(); it++) {
            if (sets[b].find(*it) != sets[b].end()) {
                Nc++;
            }
        }
        int Nt = sets[a].size() + sets[b].size() - Nc;
        printf("%.2f%%\n", (double)Nc / Nt * 100);
    }
    return 0;
}